package br.com.iswe.gwt.ui.client.base;

import br.com.iswe.gwt.manter.client.ManterEntryPointImpl;
import br.com.iswe.gwt.ui.client.Estrutura;
import br.com.iswe.gwt.ui.client.menu.MenuLateral;
import br.com.iswe.gwt.util.client.CommonConstants;
import br.com.iswe.gwt.util.client.FlatMap;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;

public abstract class BaseEntryPoint extends ManterEntryPointImpl {

	protected static final String PAINEL_USE_CASE = "PN_USE_CASE";

	//Constantes i18N
	protected final CommonConstants commonConstants = (CommonConstants) GWT.create(CommonConstants.class);
	
	//TODO: Pensar em como modularizar isso.. de forma que o projeto defina sua estrutura.
	protected Estrutura estrutura = null;
	
	public void onModuleLoad() {
		MenuLateral.newInstance();//assegura q sempre pega um novo menu lateral para cada caso de uso.
		//Configura a estrutura do caso de uso
		setupEstrutura();
		RootPanel.get(PAINEL_USE_CASE).add(estrutura);
	}
	
	protected Widget getLeftWidget() {
		return null;
	}

	protected Widget getTopWidget() {
		return null;
	}
	
	protected void setupEstrutura() {
		//Configura a tabela de estrutura.
		estrutura = new Estrutura();
		estrutura.setLeftWidget(getLeftWidget());
		estrutura.setCenterWidget(createCentralPanel());
		estrutura.setTopWidget(getTopWidget());
		estrutura.setup();
	}

	protected abstract Widget createCentralPanel();

	public Estrutura getEstrutura() {
		return estrutura;
	}

	public void setInitParameters(FlatMap useCaseInitParameters) {
		//Cada caso de uso deve ter sua propria implementacao
	}
}
